import { cloneDeep, isEmpty, forEach } from 'lodash';
import { fetchConfig, fetchData, updateEntity } from '../services/taskService';
//任务统计看板，可以进行拖动。
const Model = {
  namespace: 'enoadTask', // 命名空间
  state: {
    dataSource: [], //真实数据。
    taskStatus: [], //已有的泳道标题。
  }, // store 数据
  effects: {
    // 获取配置信息。用来展示泳道顶部标签。
    *fetchConfig({ payload }, { call, put }) {
      const res = yield call(fetchConfig, { ...payload });
      if (res.code === 200 && res.data) {
        let state = JSON.parse(res.data.state);
        let status = state.find((item) => {
          return item.apiKey == 'taskStatus';
        });
        if (status) {
          yield put({
            type: 'changeStatus',
            payload: { taskStatus: status.option },
          });
        }
      }
    },

    // 获取泳道中的正常数据。
    *fetchData({ payload }, { call, put }) {
      const res = yield call(fetchData, { ...payload });
      if (res.code === 200 && res.data) {
        let dataSource = res.data;
        yield put({
          type: 'changeStatus',
          payload: { dataSource },
        });
      }
    },

    *updateEntity({ payload }, { call, put }) {
      let storage = window.sessionStorage;
      let userDate = storage.getItem('user');
      if (userDate) {
        userDate = JSON.parse(userDate);
      }
      payload.params["updateBy"] = JSON.stringify({ id: userDate.data._id, name: userDate.data.name });
      const res = yield call(updateEntity, { ...payload });
      if (res.code === 200 && res.data) {
        return res.data;
      } else {
        return null;
      }
    },
  },

  reducers: {
    // effect获取数据处理方法
    changeStatus(state, { payload }) {
      return { ...state, ...payload };
    },
  },
};
export default Model;
